package common

// ToolFunction 工具函数
type ToolFunction interface {
	// GetFunctionName 获取函数名
	GetFunctionName() string
	// GetFunctionObject 获取函数对象
	//  {
	//        "type": "function",
	//        "function": {
	//            "name": "function_name",
	//            "description": "工具描述，辅助模型判断是否调用该工具",
	//            "parameters": {
	//                "type": "object",
	//                "properties": {
	//                    "方法参数1": {
	//                        "type": "string",
	//                        "description": "参数描述",
	//                    }
	//                },
	//                "required": ["必填参数"]
	//            }
	//        }
	//    }
	GetFunctionObject() Tool
	// Execute 执行函数
	// arguments: 函数参数，json格式字符串
	Execute(arguments string) string
}

type Tool struct {
	Id       string    `json:"id,omitempty"`
	Index    int       `json:"index,omitempty"`
	Type     string    `json:"type"`
	Function *Function `json:"function,omitempty"`
}
type Function struct {
	Name        string      `json:"name,omitempty"`
	Description string      `json:"description,omitempty"`
	Parameters  *Parameters `json:"parameters,omitempty"`
	Arguments   string      `json:"arguments,omitempty"`
}

type Parameters struct {
	Type       string              `json:"type,omitempty"`
	Properties map[string]Property `json:"properties,omitempty"`
	Required   []string            `json:"required,omitempty"`
}

type Property struct {
	Type        string `json:"type,omitempty"`
	Description string `json:"description,omitempty"`
}
